<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) 2012-2020 the OpenProject GmbH

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.

OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2017 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

See docs/COPYRIGHT.rdoc for more details.

++#%>

(function($) {
  $(function() {

    $('#settings_session_ttl_enabled').on('change', function(){
      $('#settings_session_ttl_container').toggle($(this).is(':checked'));
    }).trigger('change');


    /** Sync SCM vendor select when enabled SCMs are changed */
    $('[name="settings[enabled_scm][]"]').change(function() {
      var wasDisabled = !this.checked,
        vendor = this.value,
        select = $('#settings_repositories_automatic_managed_vendor'),
        option = select.find('option[value="' + vendor + '"]');

      // Skip non-manageable SCMs
      if (option.length === 0) {
        return;
      }

      option.prop('disabled', wasDisabled);
      if (wasDisabled && option.prop('selected')) {
        select.val('');
      }
    });

    /* Javascript for Settings::TextSettingCell */
    let langSelectSwitchData = function(select) {
      let self = $(select);
      let id = self.attr("id");
      let settingName = id.replace('lang-for-', '');
      let newLang = self.val();
      let textArea =$(`#settings-${settingName}`)
      let editor = textArea.siblings('ckeditor-augmented-textarea').data('editor');

      return { id: id, settingName: settingName, newLang: newLang, textArea: textArea, editor: editor }
    };

    // Upon focusing:
    //   * store the current value of the editor in the hidden field for that lang.
    // Upon change:
    //   * get the current value from the hidden field for that lang and set the editor text to that value.
    //   * Set the name of the textarea to reflect the current lang so that the value stored in the hidden field
    //     is overwritten.
    $(".lang-select-switch")
      .focus(function() {
        let data = langSelectSwitchData(this);

        $(`#${data.id}-${data.newLang}`).val(data.editor.getData());
      })
      .change(function() {
        let data = langSelectSwitchData(this);

        let storedValue = $(`#${data.id}-${data.newLang}`).val();

        data.editor.setData(storedValue);
        data.textArea.attr('name', `settings[${data.settingName}][${data.newLang}]`)
      });
    /* end Javascript for Settings::TextSettingCell */

    $('.admin-settings--form').submit(function() {
       /* Update consent time if consent required */
       if ($('#settings_consent_required').is(':checked') && $('#toggle_consent_time').is(':checked')) {
           $('#settings_consent_time')
               .val(new Date().toISOString())
               .prop('disabled', false);
       }

      return true;
    });

    /** Toggle notification settings fields */
    $("#email_delivery_method_switch").on("change", function() {
      delivery_method = $(this).val();
      $(".email_delivery_method_settings").hide();
      $("#email_delivery_method_" + delivery_method).show();
    }).trigger("change");

    $('#settings_smtp_authentication').on('change', function() {
      var isNone = $(this).val() === 'none';
      $('#settings_smtp_user_name,#settings_smtp_password')
          .closest('.form--field')
          .toggle(!isNone);
    });

    /** Toggle repository checkout fieldsets required when option is disabled */
    $('.settings-repositories--checkout-toggle').change(function() {
      var wasChecked = this.checked,
        fieldset = $(this).closest('fieldset');

        fieldset
          .find('input,select')
          .filter(':not([type=checkbox])')
          .filter(':not([type=hidden])')
          .removeAttr('required') // Rails 4.0 still seems to use attribute
          .prop('required', wasChecked);
    })

    /** Toggle highlighted attributes visibility depending on if the highlighting mode 'inline' was selected*/
    $('.settings--highlighting-mode select').change(function() {
      var highlightingMode = $(this).val();
      $(".settings--highlighted-attributes").toggle(highlightingMode === "inline")
    })

    /** Initialize hightlighted attributes checkboxes. If none is selected, it means we want them all. So let's
     * show them all as selected.
     * On submitting the form, we remove all checkboxes before sending to communicate, we actually want all and not
     * only the selected.*/
    if ($(".settings--highlighted-attributes input[type='checkbox']:checked").length == 0) {
      $(".settings--highlighted-attributes input[type='checkbox']").prop("checked", true);
    }
    $('#tab-content-work_packages form').submit(function() {
      var availableAttributes = $(".settings--highlighted-attributes input[type='checkbox']");
      var selectedAttributes = $(".settings--highlighted-attributes input[type='checkbox']:checked");
      if (selectedAttributes.length == availableAttributes.length) {
        availableAttributes.prop("checked", false);
      }
    })
  });
}(jQuery));
